import struct
import random
import os


def packMessage(info):
    """
    将输入数据转换为字节流

    参数:
        info: 可以是列表、元组或单个数值

    返回:
        bytes: 转换后的字节流
    """

    if isinstance(info, (list, tuple)):
        # 如果是数组，将所有元素打包为无符号字节(B)
        return struct.pack(f">{len(info)}H", *info).hex()
    elif isinstance(info, int):
        # 如果是单个整数，打包为4字节整型(i)
        return struct.pack(">i", info).hex()
    elif isinstance(info, str):
        # 如果是字符串，将其转换为字节
        return bytes(info, encoding="utf-8").hex()
    elif isinstance(info, bytes):
        # 如果是字节，直接返回
        return info
    elif isinstance(info, float):
        # 如果是浮点数，打包为4字节浮点型(f)
        return struct.pack(">f", info).hex()
    elif isinstance(info, bool):
        # 如果是布尔值，打包为1字节布尔型(?), 注意这里需要使用struct.pack而不是bool
        return struct.pack("?", info).hex()
    else:
        # 其他类型尝试直接转换为字节
        try:
            print(f"step 5")
            return bytes(info)
        except:
            raise ValueError("不支持的数据类型")


if os.getenv("DEBUG") == "1":

    def main():
        # 示例1: 打包随机数组
        random_array = [random.randint(0, 65500), 1, 2, 3, 4, 5]
        packed_data = packMessage(random_array)
        print(f"原始数组: {random_array} \n转换后:{ packed_data}")

        # 示例2: 打包单个整数
        number = 123456
        packed_num = packMessage(number)
        print(f"原始数: {number} \n转换后:{ packed_num}")

        str = "hello"
        packed_str = packMessage(str)
        print(f"原始字符串: {str} \n转换后:{ packed_str}")

    if __name__ == "__main__":
        main()
